package com.jxs.easysecurity.session;

import com.jxs.easysecurity.auth.Authentication;
import com.jxs.easysecurity.token.TokenMergeInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 用户登陆成功后，返回用户的资源信息。
 * @author jiangxingshang
 * @since 17/6/20
 */
public class LoginResult {

    private String userId;
    private Set<String> resourceId;
    private Map<String, Object> extras = new HashMap<>();
    private Integer timeout;
    private TokenMergeInfo tokenMergeInfo;

    /**
     *
     * @param userId 用户的唯一标识
     * @param resourceId 用户拥有的资源ID
     */
    public LoginResult(String userId, Set<String> resourceId) {
        this.userId = userId;
        this.resourceId = resourceId;
    }

    public String getUserId() {
        return userId;
    }

    public Set<String> getResourceId() {
        return resourceId;
    }

    /**
     * 如果你希望返回一些额外信息给外部（通常是接收{@link LoginHandler#login(Authentication)}返回值的地方）。
     * @see SessionWrapper#getExtra(String)
     * @param name
     * @param data
     * @return
     */
    public LoginResult set(String name, Object data) {
        extras.put(name, data);
        return this;
    }

    public Map<String, Object> getExtras() {
        return extras;
    }

    /**
     * 设置访问凭证的有效时间，过了这个时间，凭证将会失效。
     * @param timeout 单位秒
     * @return
     */
    public LoginResult setAccessTokenTimeout(int timeout) {
        this.timeout = timeout;
        return this;
    }

    public Integer getTimeout() {
        return timeout;
    }

    public TokenMergeInfo getTokenMergeInfo() {
        return tokenMergeInfo;
    }

    public void setTokenMergeInfo(TokenMergeInfo tokenMergeInfo) {
        this.tokenMergeInfo = tokenMergeInfo;
    }
}
